package com.zsp.coupon.executor.impl;

import com.zsp.coupon.constant.RuleFlag;
import com.zsp.coupon.executor.AbstractExecutor;
import com.zsp.coupon.executor.RuleExecutor;
import com.zsp.coupon.vo.CouponTemplateSDK;
import com.zsp.coupon.vo.SettlementInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class LijianExceutor extends AbstractExecutor
        implements RuleExecutor {
    /**
     * 规则类型标记
     */
    @Override
    public RuleFlag ruleConfig() {
        return RuleFlag.LIJIAN;
    }

    /**
     优惠卷计算的规则 /**
     * <h2>优惠券规则的计算</h2>
     * @param settlement {@link SettlementInfo} 包含了选择的优惠券
     * @return {@link SettlementInfo} 修正过的结算信息
     * */
    @Override
    public SettlementInfo computeRule(SettlementInfo settlement) {
        double goodsSum = retain2Decimals(goodsCostSum(
                settlement.getGoodsInfos()
        ));
        SettlementInfo probability = processGoodsTypeNotSatisfy(
                settlement,goodsSum
        );
        if ( null!= probability ){
            log.debug("lijian is not match to goodsType");
            return probability;
        }

        //立减优惠卷直接使用，没有现在规则
            CouponTemplateSDK templateSDK = settlement.getCouponAndTemplateInfo()
                                .get(0).getTemplate();
        double quota =(double) templateSDK.getRule().getDiscount().getQuota();
        //计算使用优惠劵之后的价格  ---结算
        settlement.setCost(retain2Decimals(goodsSum - quota) >minCost() ?
                retain2Decimals(goodsSum - quota ) :minCost());
        log.debug("use lijian coupon make goods cost from {} to {}, ",
                goodsSum,settlement.getCost());
        return settlement;
    }
}
